<template>
	<!-- 删除文件对话框 -->
	<n-modal
		title="删除文件"
		v-model:show="visible"
    preset="dialog"
    width="580px"
    @close="handleDialogClose"
    positive-text="确认"
    negative-text="取消"
    @positive-click="handleDialogSure"
    @negative-click="handleDialogClose"
	>
    <div>你要删除 <n-text type="success">{{fileInfo.isDir===1?'文件夹: ':'文件: '}}{{fileInfo.fileName}}</n-text> </div>
    <div>此操作将永久删除该文件, 是否继续？</div>
	</n-modal>
</template>

<script lang="ts" setup>
import {fileController} from '@/api/file/fileController'
import {useMessage } from 'naive-ui'
import {ref} from "vue";
//@ts-ignore
import Bus from "@/components/file/box/GlobalUploader/utils/bus";
import {FilePanStore} from "@/store/modules/file";
const filePanStore = FilePanStore();

const message = useMessage()

// 对话框是否可见
const visible = ref(false)
// loading
const sureBtnLoading = ref(false)

// 是否为批量删除：true - 批量删除，false - 单文件删除
const isBatchOperation = ref(false)
// 文件信息，批量时为数组、单文件时为对象
const fileInfo:any = ref([])
// 删除模式：1-删除到回收站 2-彻底删除
const deleteMode = ref(0)


/**
 * 初始化删除文件实例
 * @param {boolean} isBatchOperation 是否为批量删除：true - 批量删除，false - 单文件删除
 * @param {object | array} fileInfo 文件信息，批量时为数组、单文件时为对象
 * @param {number} deleteMode 删除模式：1-删除到回收站 2-彻底删除
 */
const showDeleteFileDialog =(isBatchOperation_:boolean , fileInfo_ :any , deleteMode_:number) =>{
  isBatchOperation.value = isBatchOperation_
  fileInfo.value = fileInfo_
  deleteMode.value = deleteMode_
  visible.value = true
}

defineExpose({
  showDeleteFileDialog
})

/**
 * 删除文件对话框 | 对话框关闭的回调
 * @description 关闭对话框，重置表单
 */
const handleDialogClose = () => {
  visible.value = false
}
/**
 * 删除文件对话框 | 确定按钮点击事件
 * @description 区分 删除到回收站中 | 在回收站中彻底删除，调用相应的删除文件接口
 */
const handleDialogSure = async () => {
  sureBtnLoading.value = true
  console.log(isBatchOperation.value)
  let res = null
  // 批量删除模式
  if (isBatchOperation.value) {
    // 区分删除类型
    switch (deleteMode.value) {
        // 删除文件到回收站
      case 1: {
        res = await fileController.batchDeleteFile({
          userFileIds: fileInfo.value
              .map((item:any) => {
                return item.userFileId
              })
              .join(',')
        })
        break
      }
        // 回收站中彻底删除
      case 2: {
        res = await fileController.batchDeleteRecoveryFile({
          userFileIds: fileInfo.value
              .map((item:any) => {
                return item.userFileId
              })
              .join(',')
        })
        break
      }
    }
  } else {
    console.log("deleteMode.value:",deleteMode.value)
    // 单文件删除模式
    // 区分删除类型
    switch (deleteMode.value) {
        // 删除文件到回收站
      case 1: {
        console.log("deleteFile")
        res = await fileController.deleteFile({
          userFileId: fileInfo.value.userFileId
        })
        break
      }
        // 回收站中彻底删除
      case 2: {
        res = await fileController.deleteRecoveryFile({
          userFileId: fileInfo.value.userFileId
        })
        break
      }
    }
  }
  if (res.code === 200) {
    sureBtnLoading.value = false
    message.success('删除成功')
    visible.value = false
    filePanStore.setIsBatchOperation(false)
    filePanStore.changeSelectedFiles([])
    Bus.emit('refreshFileList')
  } else {
    sureBtnLoading.value = false
    message.error('删除失败，' + res.message)
  }
}

</script>
